package com.example.gulimall.seckill;

import com.example.common.constant.BeanScanConstant;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;


/**
 * 高并发系统设计要点：
 *  1. 服务职责单一，单独部署服务
 *  2. 秒杀链接加密，使用后台提供密码
 *  3. 库存预热，提前将数据加载到缓存中
 *  4. 动静分离，做好静态资源的单独部署
 *  5. 恶意请求拦截，在网关进行拦截
 *  6. 流量错峰 (使用验证码机制，加入购物车)
 *  7. 熔断（快速失败），限流（前端限流，后端限流），降级（压力过大，将服务引导到降级页面）
 *  8. 队列削峰（将所有的请求放入到队列中保存，由订单服务慢慢创建订单，减少压力）
 *
 * 整合 Sentinel
 *  1. 下载 maven 依赖
 *  2. 下载 Sentinel 控制台
 *  3. 配置 yml
 *  spring:
 *   cloud:
 *     sentinel:
 *       transport:
 *         port: 8719
 *         dashboard: localhost:8080
 * 整合 actuator
 *  1. 导入依赖 ： spring-boot-starter-actuator
 *  2. 配置： management.endpoints.web.exposure.include=*
 *  3. 自定义配置：
 *
 */
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication(scanBasePackages = {
        BeanScanConstant.RABBIT_SEC_KILL_PATH,
        BeanScanConstant.SENTINEL_PATH,
        BeanScanConstant.REDISSON_PATH,
        BeanScanConstant.SEC_KILL_SELF,
        BeanScanConstant.COMMON_PATH,
})
public class GulimallSeckillApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallSeckillApplication.class, args);
    }

}
